package com.monolith.jd.demo.common.entity;

import com.monolith.jd.demo.common.util.JSONUtil;
import org.springframework.beans.BeanUtils;

/**
 * 2018/10/1 Create by 郭文梁
 * JSONConvertible
 * JSON序列化/反序列化对象
 *
 * @author 郭文梁
 * @date 2018/10/1
 */
public interface JSONConvertible<T> {
    /**
     * 从JSON加载数据
     *
     * @param json json字符串
     * @return obj
     */
    @SuppressWarnings("unchecked")
    default T loadData(String json) {
        JSONConvertible tmpObj = JSONUtil.parseJSON(json, getClass());
        if (tmpObj == null) {
            throw new NullPointerException("Could not convert json:" + json);
        }
        BeanUtils.copyProperties(tmpObj, this);
        return (T) this;
    }

    /**
     * 转换为JSON String
     *
     * @return JSON String
     */
    default String toJSON() {
        return JSONUtil.toJSON(this);
    }
}
